DynamoDB এ Data Operations

Database Tutorials - ডাইনামোডিবি (DynamoDB)
276
276

Amazon DynamoDB হল একটি NoSQL ডেটাবেস যা উচ্চ পারফরম্যান্স এবং স্কেলেবিলিটির জন্য ডিজাইন করা হয়েছে। DynamoDB তে ডেটা অপারেশনগুলি বেশ সহজ এবং দ্রুত হয়, এবং এতে CRUD (Create, Read, Update, Delete) অপারেশনগুলো করা সম্ভব। এখানে DynamoDB তে ডেটা অপারেশন কীভাবে করা যায় তা বিস্তারিতভাবে ব্যাখ্যা করা হয়েছে।


১. Data Insert (PutItem)

DynamoDB তে নতুন ডেটা ইনসার্ট করার জন্য PutItem অপারেশন ব্যবহার করা হয়। এটি একটি নির্দিষ্ট টেবিলে একটি আইটেম (Item) যোগ করে।

উদাহরণ:

ধরা যাক, আমাদের একটি Users টেবিল আছে যেখানে প্রতিটি ইউজারের জন্য UserID, Name, এবং Email রয়েছে। একটি নতুন ইউজার যোগ করতে:

import boto3

# DynamoDB ক্লায়েন্ট তৈরি
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('Users')

# নতুন আইটেম (ডেটা) ইনসার্ট করা
response = table.put_item(
   Item={
        'UserID': '001',
        'Name': 'John Doe',
        'Email': 'john.doe@example.com'
    }
)

print("PutItem succeeded:", response)

এই কোডটি Users টেবিলে একটি নতুন ইউজার যোগ করবে, যেখানে UserID হল '001', নাম 'John Doe', এবং ইমেইল 'john.doe@example.com'।


২. Data Read (GetItem)

DynamoDB তে ডেটা রিড করার জন্য GetItem অপারেশন ব্যবহার করা হয়। এটি একটি নির্দিষ্ট আইটেম নিয়ে আসে তার প্রাইমারি কী (Primary Key) ব্যবহার করে।

উদাহরণ:

response = table.get_item(
    Key={
        'UserID': '001'
    }
)

item = response.get('Item')
if item:
    print("User found:", item)
else:
    print("User not found")

এই কোডটি UserID '001' থাকা ইউজারের তথ্য নিয়ে আসবে।


৩. Data Update (UpdateItem)

DynamoDB তে আইটেম আপডেট করার জন্য UpdateItem অপারেশন ব্যবহার করা হয়। এটি একটি নির্দিষ্ট আইটেমের যেকোনো অ্যাট্রিবিউট পরিবর্তন করতে সাহায্য করে।

উদাহরণ:

response = table.update_item(
    Key={
        'UserID': '001'
    },
    UpdateExpression="set Email = :e",
    ExpressionAttributeValues={
        ':e': 'john.new@example.com'
    },
    ReturnValues="UPDATED_NEW"
)

print("UpdateItem succeeded:", response)

এই কোডটি UserID '001' থাকা ইউজারের ইমেইল আপডেট করবে।


৪. Data Delete (DeleteItem)

DynamoDB তে আইটেম ডিলেট করার জন্য DeleteItem অপারেশন ব্যবহার করা হয়। এটি একটি নির্দিষ্ট আইটেম ডিলিট করতে ব্যবহৃত হয়, যা প্রাইমারি কী ব্যবহার করে নির্ধারণ করা হয়।

উদাহরণ:

response = table.delete_item(
    Key={
        'UserID': '001'
    }
)

print("DeleteItem succeeded:", response)

এই কোডটি UserID '001' থাকা ইউজারকে ডিলিট করবে।


৫. Batch Write (BatchWriteItem)

DynamoDB তে একাধিক আইটেম একসাথে ইনসার্ট বা ডিলিট করতে BatchWriteItem ব্যবহার করা হয়। এটি একাধিক PutItem এবং DeleteItem অপারেশন একসাথে করা সম্ভব করে।

উদাহরণ:

with table.batch_writer() as batch:
    batch.put_item(
        Item={
            'UserID': '002',
            'Name': 'Jane Doe',
            'Email': 'jane.doe@example.com'
        }
    )
    batch.delete_item(
        Key={
            'UserID': '001'
        }
    )

এই কোডটি দুটি অপারেশন একসাথে করবে:

  • UserID '002' ইউজারের তথ্য ইনসার্ট করবে।
  • UserID '001' ইউজারকে ডিলিট করবে।

৬. Condition Expressions (ConditionCheck)

DynamoDB তে একাধিক অপারেশন করার সময়, কিছু শর্ত (condition) নির্ধারণ করতে পারেন। যেমন, যদি একটি আইটেম উপস্থিত থাকে বা না থাকে, তখন কিছু কার্যক্রম করতে।

উদাহরণ:

response = table.put_item(
    Item={
        'UserID': '003',
        'Name': 'Alice Smith',
        'Email': 'alice.smith@example.com'
    },
    ConditionExpression="attribute_not_exists(UserID)"
)

print("PutItem succeeded:", response)

এই কোডটি শুধু তখন আইটেম ইনসার্ট করবে যখন UserID '003' ইতিমধ্যে টেবিলে উপস্থিত না থাকে (অর্থাৎ নতুন ইউজার)। যদি ইউজারটি আগে থেকেই টেবিলে থাকে, তখন এটি ব্যর্থ হবে।


৭. Query (Query)

DynamoDB তে Query অপারেশন ব্যবহার করে আপনি নির্দিষ্ট শর্ত অনুযায়ী ডেটা অনুসন্ধান করতে পারেন। এটি প্রাইমারি কী বা সোর্ট কী দ্বারা ডেটা অনুসন্ধান করতে সাহায্য করে।

উদাহরণ:

response = table.query(
    KeyConditionExpression=Key('UserID').eq('001')
)

for item in response['Items']:
    print(item)

এই কোডটি UserID '001' এর জন্য টেবিল থেকে সকল ডেটা ফিরিয়ে আনবে।


৮. Scan (Scan)

Scan অপারেশনটি টেবিলের সমস্ত আইটেম স্ক্যান করে এবং সকল ডেটা ফিরে আনে। এটি সাধারণত বড় ডেটাসেটের জন্য কম কার্যকর, তবে সহজ কাজের জন্য ব্যবহার করা যেতে পারে।

উদাহরণ:

response = table.scan()

for item in response['Items']:
    print(item)

এই কোডটি টেবিলের সমস্ত আইটেম স্ক্যান করে এবং তাদের প্রদর্শন করবে।


উপসংহার:

DynamoDB তে ডেটা অপারেশনগুলি খুবই সহজ এবং দ্রুত করা যায়। এটি স্কেলেবল এবং উচ্চ পারফরম্যান্স অ্যাপ্লিকেশনগুলির জন্য আদর্শ, যেখানে সঠিকভাবে ডেটা রিড, রাইট, আপডেট এবং ডিলিট করা অত্যন্ত গুরুত্বপূর্ণ। PutItem, GetItem, UpdateItem, DeleteItem, Query, এবং Scan সহ অন্যান্য অপারেশনগুলি অ্যাপ্লিকেশন ডেভেলপমেন্টের জন্য মৌলিক কম্পোনেন্টস।

common.content_added_by

Data Insert, Update, এবং Delete করা

252
252

Amazon DynamoDB তে ডেটা অপারেশনগুলি (Insert, Update, Delete) খুবই গুরুত্বপূর্ণ এবং এগুলি মূলত টেবিলের মধ্যে Items (যেগুলি ডেটাবেসের রেকর্ড হিসাবে কাজ করে) পরিচালনা করতে ব্যবহৃত হয়। DynamoDB তে ডেটা পরিচালনার জন্য আপনি AWS Management Console, AWS CLI, অথবা AWS SDK (যেমন Python, JavaScript, Java) ব্যবহার করতে পারেন।

এখানে আমরা DynamoDB তে Insert, Update, এবং Delete অপারেশন কিভাবে করতে হবে তা আলোচনা করব।


১. Data Insert (PutItem)

PutItem অপারেশনটি একটি নতুন আইটেম ইনসার্ট করতে বা বিদ্যমান আইটেমের উপরে নতুন ডেটা লেখার জন্য ব্যবহৃত হয়। এই অপারেশনটি একটি নির্দিষ্ট টেবিলে নতুন আইটেম তৈরি করবে, যদি আইটেমটি আগে থেকে না থাকে।

PutItem ব্যবহার করে ডেটা ইনসার্ট করা

Syntax:

import boto3

# DynamoDB ক্লায়েন্ট তৈরি
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('YourTableName')

# আইটেম ইনসার্ট করা
table.put_item(
    Item={
        'PrimaryKey': 'value1',   # Primary key
        'SortKey': 'value2',       # Optional Sort key (যদি থাকে)
        'Attribute1': 'Value1',    # অন্যান্য অ্যান্ট্রিবিউট
        'Attribute2': 'Value2'
    }
)

অতিরিক্ত তথ্য:

  • Primary Key হল অবশ্যই প্রয়োজনীয়, তবে Sort Key (যদি টেবিলের মধ্যে থাকে) ঐচ্ছিক।
  • DynamoDB স্বয়ংক্রিয়ভাবে আইটেমটি আপডেট করে যদি একই Primary Key এর আইটেম আগে থেকে থাকে।

২. Data Update (UpdateItem)

UpdateItem অপারেশনটি একটি আইটেম আপডেট করার জন্য ব্যবহৃত হয়। এর মাধ্যমে আপনি পূর্বে ইনসার্ট করা আইটেমের কোন অ্যাট্রিবিউট বা ফিল্ড পরিবর্তন করতে পারেন।

UpdateItem ব্যবহার করে ডেটা আপডেট করা

Syntax:

import boto3

# DynamoDB ক্লায়েন্ট তৈরি
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('YourTableName')

# আইটেম আপডেট করা
table.update_item(
    Key={
        'PrimaryKey': 'value1',   # Primary key
        'SortKey': 'value2'        # Sort key (যদি থাকে)
    },
    UpdateExpression="set Attribute1 = :val1",
    ExpressionAttributeValues={
        ':val1': 'UpdatedValue'
    },
    ReturnValues="UPDATED_NEW"
)

অতিরিক্ত তথ্য:

  • UpdateExpression এ আপনি যে অ্যাট্রিবিউটটি আপডেট করতে চান তার জন্য একটি নতুন মান প্রদান করতে হবে।
  • ReturnValues আপনাকে আপডেট করা নতুন মান ফেরত দেয়।

৩. Data Delete (DeleteItem)

DeleteItem অপারেশনটি একটি নির্দিষ্ট আইটেম ডিলিট করার জন্য ব্যবহৃত হয়, যা টেবিলের মধ্যে একটি Primary Key দ্বারা চিহ্নিত হয়।

DeleteItem ব্যবহার করে ডেটা ডিলিট করা

Syntax:

import boto3

# DynamoDB ক্লায়েন্ট তৈরি
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('YourTableName')

# আইটেম ডিলিট করা
table.delete_item(
    Key={
        'PrimaryKey': 'value1',   # Primary key
        'SortKey': 'value2'        # Sort key (যদি থাকে)
    }
)

অতিরিক্ত তথ্য:

  • Key নির্দিষ্ট করে যে আইটেমটি ডিলিট করতে চান, যা Primary Key এর মাধ্যমে চিহ্নিত হয়।
  • একবার আইটেম ডিলিট হয়ে গেলে তা আর ফেরত আনা সম্ভব নয়।

Batch Write Operations

যদি আপনাকে একাধিক আইটেম ইনসার্ট বা ডিলিট করতে হয়, তবে আপনি BatchWriteItem অপারেশন ব্যবহার করতে পারেন।

BatchWriteItem ব্যবহার করে একাধিক আইটেম ইনসার্ট এবং ডিলিট করা

Syntax:

import boto3

# DynamoDB ক্লায়েন্ট তৈরি
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('YourTableName')

# একাধিক আইটেম ইনসার্ট এবং ডিলিট করা
with table.batch_writer() as batch:
    batch.put_item(Item={'PrimaryKey': 'value1', 'Attribute': 'value'})
    batch.delete_item(Key={'PrimaryKey': 'value2'})

উপসংহার

  • PutItem: নতুন আইটেম ইনসার্ট করতে ব্যবহৃত হয়, এবং একই Primary Key থাকলে আইটেম আপডেটও করতে পারে।
  • UpdateItem: বিদ্যমান আইটেমের অ্যাট্রিবিউট পরিবর্তন করতে ব্যবহৃত হয়।
  • DeleteItem: নির্দিষ্ট আইটেম মুছে ফেলতে ব্যবহৃত হয়।
  • Batch Write: একাধিক আইটেম একসাথে ইনসার্ট বা ডিলিট করতে ব্যবহৃত হয়।

এই তিনটি অপারেশন আপনাকে DynamoDB তে ডেটা খুব সহজে ইনসার্ট, আপডেট এবং ডিলিট করতে সাহায্য করবে।

common.content_added_by

Batch Write এবং Batch Read অপারেশন

204
204

Batch Write এবং Batch Read অপারেশনগুলি DynamoDB-তে একাধিক রেকর্ড একসঙ্গে প্রক্রিয়া করার জন্য ব্যবহার করা হয়, যা পারফরম্যান্স এবং স্কেলেবিলিটি উন্নত করতে সাহায্য করে। এই অপারেশনগুলি আপনাকে একসাথে একাধিক ডেটা লিখতে এবং পড়তে অনুমতি দেয়, যার ফলে ডেটাবেসে অনেকগুলো রেকর্ড হ্যান্ডেল করার সময় দক্ষতা বাড়ে।

1. Batch Write অপারেশন

DynamoDB-তে Batch Write অপারেশন ব্যবহার করে আপনি একাধিক PutItem বা DeleteItem রেকর্ড একসাথে করতে পারেন। Batch Write অপারেশন 25টি পর্যন্ত একসঙ্গে রেকর্ড লেখার (Put) বা মুছে ফেলার (Delete) অনুমতি দেয়।

Batch Write অপারেশনের সিনট্যাক্স

Batch Write অপারেশনটি দুইটি মূল অংশে বিভক্ত:

  • PutRequest: নতুন আইটেম লিখতে।
  • DeleteRequest: বিদ্যমান আইটেম মুছে ফেলতে।
Python (Boto3) উদাহরণ: Batch Write
import boto3

# DynamoDB রিসোর্স তৈরি করা
dynamodb = boto3.resource('dynamodb', region_name='us-west-2')
table = dynamodb.Table('Movies')

# একাধিক আইটেম লেখা
with table.batch_writer() as batch:
    batch.put_item(
        Item={
            'Year': 2024,
            'Title': 'New Movie',
            'Genre': 'Action'
        }
    )
    batch.put_item(
        Item={
            'Year': 2023,
            'Title': 'Another Movie',
            'Genre': 'Drama'
        }
    )

    # একাধিক আইটেম মুছে ফেলা
    batch.delete_item(
        Key={
            'Year': 2020,
            'Title': 'Old Movie'
        }
    )
Batch Write এর সুবিধা:
  • একাধিক ডেটা একযোগে লেখার ফলে অপারেশনটি অনেক দ্রুত সম্পন্ন হয়।
  • PutItem এবং DeleteItem একসাথে করা যায়।
  • প্রতিটি ব্যাচে সর্বোচ্চ 25টি আইটেম প্রক্রিয়া করা যেতে পারে।

2. Batch Read অপারেশন

Batch Read অপারেশন ব্যবহার করে আপনি একাধিক আইটেম একসাথে পড়তে পারেন। এটি BatchGetItem API ব্যবহার করে, যেখানে আপনি একাধিক টেবিলের মধ্যে একাধিক রেকর্ড অনুরোধ করতে পারেন।

Batch Read অপারেশনের সিনট্যাক্স

Batch Read অপারেশনটি একাধিক GetItem রিকোয়েস্টের মাধ্যমে ডেটা একসঙ্গে পড়ে।

Python (Boto3) উদাহরণ: Batch Read
import boto3

# DynamoDB রিসোর্স তৈরি করা
dynamodb = boto3.resource('dynamodb', region_name='us-west-2')
table = dynamodb.Table('Movies')

# একাধিক আইটেম পড়া
response = table.batch_get_item(
    RequestItems={
        'Movies': {
            'Keys': [
                {'Year': 2024, 'Title': 'New Movie'},
                {'Year': 2023, 'Title': 'Another Movie'}
            ]
        }
    }
)

# রেসপন্স থেকে আইটেমগুলি বের করা
items = response['Responses']['Movies']
for item in items:
    print(item)
Batch Read এর সুবিধা:
  • একাধিক আইটেম একসাথে পড়ার ফলে একাধিক GetItem রিকোয়েস্টের সংখ্যা কমানো যায়।
  • একে ডিস্ট্রিবিউটেড সিস্টেমের জন্য আদর্শ যেখানে একাধিক রেকর্ড একসঙ্গে অ্যাক্সেস করা প্রয়োজন।

Batch Write এবং Batch Read অপারেশন ব্যবহারের সুবিধা

  • পারফরম্যান্স উন্নতি: একাধিক আইটেম একসাথে প্রক্রিয়া করা, কম নেটওয়ার্ক রিকোয়েস্ট তৈরি হওয়ার কারণে দ্রুত অপারেশন সম্পন্ন হয়।
  • দক্ষতা: একটি ব্যাচ অপারেশনে একাধিক রেকর্ড লেখার/পড়ার ফলে সার্ভারের উপর লোড কমে এবং মোট আউটপুট দ্রুত হয়।
  • স্কেলেবিলিটি: বড় ডেটাসেটে কাজ করার সময় ব্যাচ অপারেশন স্কেলিং উন্নত করে।

সীমাবদ্ধতা

  • Batch Write-এ সর্বাধিক 25টি রেকর্ড একসঙ্গে অন্তর্ভুক্ত করা যায়।
  • Batch GetItem-এ সর্বাধিক 100 আইটেম একসঙ্গে পড়া সম্ভব, এবং এর মধ্যে প্রতিটি আইটেমের আকার 4MB-এর বেশি হতে পারবে না।

সারাংশ

  • Batch Write এবং Batch Read অপারেশনগুলি উচ্চ কর্মক্ষমতা এবং স্কেলেবিলিটি নিশ্চিত করতে সাহায্য করে, বিশেষত যখন একাধিক রেকর্ড একই সময়ে লেখা বা পড়া প্রয়োজন।
  • এগুলি DynamoDB এর পারফরম্যান্স অপটিমাইজেশনে গুরুত্বপূর্ণ ভূমিকা পালন করে, এবং ডেভেলপারদের জন্য সহজ ও দ্রুত ডেটা প্রক্রিয়াকরণের উপায় প্রদান করে।
common.content_added_by

Condition Expressions এবং Optimistic Locking

245
245

Amazon DynamoDB একটি অত্যন্ত দ্রুত এবং স্কেলেবল NoSQL ডেটাবেস। এটি বিভিন্ন ধরনের ডেটা অপারেশন এবং কনক্রিট ট্রানজেকশনাল কন্ট্রোল সাপোর্ট করে। Condition Expressions এবং Optimistic Locking দুটি গুরুত্বপূর্ণ কনসেপ্ট, যা ডেটাবেস অপারেশনের সঠিকতা এবং ডেটার কনসিস্টেন্সি নিশ্চিত করতে ব্যবহৃত হয়।


Condition Expressions:

Condition Expressions হল DynamoDB-এর একটি ফিচার যা আপনাকে ডেটাবেস অপারেশনের আগে নির্দিষ্ট শর্ত বা কন্ডিশন যাচাই করতে দেয়। আপনি যখন একটি PutItem, UpdateItem, বা DeleteItem অপারেশন চালান, তখন Condition Expression ব্যবহার করে এটি নির্ধারণ করতে পারবেন যে অপারেশনটি সফল হবে কিনা।

Condition Expression এর ব্যবহার:

Condition Expression একটি ফিল্ডের মান নির্দিষ্ট শর্ত পূরণ করছে কিনা তা চেক করে এবং কেবলমাত্র সেই শর্ত পূর্ণ হলে অপারেশনটি সম্পন্ন হয়।

উদাহরণস্বরূপ, যদি আপনি একটি UpdateItem অপারেশন চালান এবং চান যে সেটি কেবল তখনই সম্পন্ন হোক যখন একটি নির্দিষ্ট attribute (যেমন "status") একটি নির্দিষ্ট মানে রয়েছে, আপনি Condition Expression ব্যবহার করতে পারেন।

উদাহরণ:

{
    "TableName": "Users",
    "Key": {
        "UserID": {"S": "user123"}
    },
    "UpdateExpression": "SET #status = :newStatus",
    "ConditionExpression": "#status = :expectedStatus",
    "ExpressionAttributeNames": {
        "#status": "status"
    },
    "ExpressionAttributeValues": {
        ":newStatus": {"S": "Active"},
        ":expectedStatus": {"S": "Pending"}
    }
}

এখানে:

  • ConditionExpression চেক করছে যে "status" attribute এর মান "Pending" থাকতে হবে, তারপরই "status" আপডেট করা হবে।
  • এটি Optimistic Locking এর মতো কাজ করে, যেখানে আমরা একটি নির্দিষ্ট শর্ত পূরণ না হলে পরিবর্তন করতে চাই না।

Condition Expressions এর সুবিধা:

  • Consistency: আপনি যখন নিশ্চিত হতে চান যে কোনো একটি অপারেশন একটি নির্দিষ্ট শর্ত পূরণ করার পরেই সম্পন্ন হবে।
  • Concurrency Control: একাধিক থ্রেড বা ইউজার একসাথে একই ডেটা আপডেট করার সময় এটি কনফ্লিক্ট প্রতিরোধ করে।

Optimistic Locking:

Optimistic Locking একটি কৌশল যেখানে ডেটার সংশোধন বা আপডেট করার সময় আমরা আশা করি ডেটাতে কোনো কনফ্লিক্ট হবে না, এবং শুধুমাত্র যখন অন্য কেউ ডেটা পরিবর্তন করে না তখনই আমরা আমাদের পরিবর্তনটি সফলভাবে অ্যাপ্লাই করি।

DynamoDB তে Optimistic Locking এর মাধ্যমে, আপনি Condition Expressions ব্যবহার করে ডেটার versioning নিশ্চিত করতে পারেন। এই পদ্ধতিতে, প্রতিটি Item একটি version (অথবা timestamp) ফিল্ড ধারণ করে। যখন আপনি একটি UpdateItem অপারেশন চালান, আপনি নিশ্চিত করেন যে আপনি যে versionটি চেক করছেন, সেটি কোনো পরিবর্তন ছাড়াই আছে।

Optimistic Locking এর কার্যপ্রণালী:

  1. Item Create: যখন একটি নতুন আইটেম তৈরি হয়, তখন একটি version attribute সেট করা হয় (যেমন প্রথমবার 1 হতে পারে)।
  2. Item Update: আপনি যখন ডেটা আপডেট করতে চান, তখন আপনাকে নিশ্চিত করতে হবে যে এটি অন্য কেউ পরিবর্তন করেনি। এজন্য Condition Expression ব্যবহার করা হয়, যেখানে আপনি চেক করবেন যে current version এর মান আগের version এর সাথে মেলে কিনা।
  3. যদি version মেলে, তখন আপনার পরিবর্তন সফলভাবে অ্যাপ্লাই হবে। যদি মেলে না, অর্থাৎ অন্য কেউ ডেটা আপডেট করে ফেলেছে, তাহলে আপনি একটি conditional check ফেইলর পাবেন এবং আপডেটটি বাতিল হবে।

উদাহরণ:

ধরা যাক, আপনার একটি "Product" টেবিল রয়েছে, যেখানে প্রতিটি আইটেমের একটি "version" অ্যাট্রিবিউট রয়েছে। যখন আপনি ডেটা আপডেট করতে চান, আপনি নিশ্চিত করতে চান যে অন্য কেউ এই আইটেমটি পরিবর্তন করেনি।

UpdateItem API এর মধ্যে ConditionExpression ব্যবহার করা:

{
    "TableName": "Products",
    "Key": {
        "ProductID": {"S": "prod123"}
    },
    "UpdateExpression": "SET price = :newPrice, version = version + :increment",
    "ConditionExpression": "version = :currentVersion",
    "ExpressionAttributeValues": {
        ":newPrice": {"N": "299.99"},
        ":currentVersion": {"N": "1"},
        ":increment": {"N": "1"}
    }
}

এখানে:

  • আমরা version ফিল্ডের মান চেক করছি, এবং কেবলমাত্র যদি এটি 1 (বর্তমান version) থাকে, তবে আমরা নতুন মূল্য এবং version আপডেট করতে পারব।
  • যদি version এর মান পরিবর্তিত হয়ে থাকে (অর্থাৎ কেউ অন্যরকম পরিবর্তন করেছে), তাহলে Condition Expression ব্যর্থ হবে এবং পরিবর্তনটি করা হবে না।

Optimistic Locking এর সুবিধা:

  • High Throughput: Optimistic Locking ব্যবহার করার মাধ্যমে আপনি অধিক কার্যক্ষমতায় ডেটা আপডেট করতে পারেন কারণ এটি অন্যান্য ইউজারের সাথে কনফ্লিক্ট মোকাবেলার জন্য ডেটার অগ্রিম লকিংয়ের প্রয়োজন হয় না।
  • Data Consistency: এটি ডেটা কনসিস্টেন্সি নিশ্চিত করে, বিশেষ করে concurrent write অপারেশনগুলিতে।
  • Concurrency Control: একাধিক ইউজারের একই ডেটা আপডেট করার সময় ডেটা পরিবর্তনের জন্য একে অপরের মধ্যে কনফ্লিক্ট তৈরি হতে বাধা দেয়।

উপসংহার:

  • Condition Expressions এবং Optimistic Locking দুটি শক্তিশালী টুল যা ডেটাবেসের ACID (Atomicity, Consistency, Isolation, Durability) প্রিন্সিপাল বজায় রাখতে সাহায্য করে এবং ডেটার কনসিস্টেন্সি নিশ্চিত করে।
  • DynamoDB-তে Condition Expressions ব্যবহার করে আপনি কোনো একটি অপারেশন শর্তসাপেক্ষে সম্পন্ন করার জন্য কনফ্লিক্ট এভয়েড করতে পারেন।
  • Optimistic Locking কৌশলটি বিশেষভাবে সহায়ক যখন আপনি চান যে কোনো ডেটা শুধুমাত্র তখনই পরিবর্তন হবে যদি কেউ অন্য কোনো পরিবর্তন না করে থাকে।

এই দুটি কৌশলই DynamoDB-তে ডেটা অপারেশনের নিরাপত্তা এবং সঠিকতা বজায় রাখার জন্য অপরিহার্য।

common.content_added_by

Query এবং Scan অপারেশন

199
199

DynamoDB তে ডেটা অনুসন্ধান (retrieve) করার জন্য দুটি প্রধান অপারেশন রয়েছে: Query এবং Scan। এগুলি ডেটার মধ্যে তথ্য বের করার জন্য ব্যবহৃত হয়, তবে তাদের কার্যকারিতা এবং কার্যকলাপে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে।


১. Query অপারেশন

Query অপারেশন DynamoDB তে একটি নির্দিষ্ট টেবিল বা ইনডেক্স থেকে ডেটা সিলেক্ট করার জন্য ব্যবহৃত হয়, যেখানে আপনি Primary Key (Partition Key বা Partition Key + Sort Key) ব্যবহার করে নির্দিষ্ট আইটেম খুঁজে পান।

Query এর বৈশিষ্ট্য:

  • Primary Key বা Secondary Index ব্যবহার করে ডেটা অনুসন্ধান করা হয়।
  • Efficient: Query অপারেশন খুবই দ্রুত এবং পারফরম্যান্সের দিক থেকে আরও কার্যকরী, কারণ এটি ডেটাবেসের পার্টিশন বা ইনডেক্স ব্যবহার করে নির্দিষ্ট ডেটা খুঁজে বের করে।
  • Filter Expressions: আপনি ফিল্টার এক্সপ্রেশন ব্যবহার করে ফলাফল আরও সুনির্দিষ্ট করতে পারেন, তবে এটি Query এর দক্ষতা কিছুটা কমাতে পারে।
  • Return Specific Items: Query অপারেশন শুধুমাত্র নির্দিষ্ট আইটেম বা রেঞ্জ রিটার্ন করে।

Query ব্যবহার করার উদাহরণ:

ধরা যাক, আপনার একটি Users টেবিল রয়েছে, এবং আপনি একটি নির্দিষ্ট UserID এর সকল তথ্য বের করতে চান। এটি করার জন্য আপনি Query অপারেশন ব্যবহার করবেন, যেটি UserID এর ভিত্তিতে ডেটা ফিরিয়ে দেবে।

import boto3

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('Users')

response = table.query(
    KeyConditionExpression=Key('UserID').eq('12345')
)

items = response['Items']
print(items)

২. Scan অপারেশন

Scan অপারেশন সম্পূর্ণ টেবিল বা ইনডেক্সের মধ্যে ডেটা অনুসন্ধান করে। এটি একটি ব্রুট-ফোর্স পদ্ধতি, যেখানে প্রতিটি আইটেম স্ক্যান করে ফলাফল তৈরি করা হয়।

Scan এর বৈশিষ্ট্য:

  • Full Table Scan: Scan অপারেশন টেবিলের সমস্ত আইটেম স্ক্যান করে এবং সমস্ত ডেটা প্রক্রিয়া করে।
  • Slower: Query এর তুলনায় Scan অপারেশন সাধারণত ধীরগতির হয়, কারণ এটি পুরো টেবিল বা ইনডেক্সের মধ্যে একে একে সব আইটেম পরীক্ষা করে।
  • Filter Expressions: আপনি Scan অপারেশনে ফিল্টার এক্সপ্রেশন ব্যবহার করতে পারেন, যা স্ক্যানের পর ফলাফলকে ফিল্টার করবে, তবে এটি সম্পূর্ণ টেবিল স্ক্যানের প্রভাব ফেলবে।
  • No Primary Key Constraint: Scan অপারেশন Primary Key ব্যবহার না করলেও কাজ করে, তাই এটি আরও সাধারণভাবে ব্যবহার করা যায়, তবে পারফরম্যান্স কমে যেতে পারে।

Scan ব্যবহার করার উদাহরণ:

ধরা যাক, আপনি আপনার Users টেবিল থেকে সকল ব্যবহারকারীর নাম বের করতে চান যারা নির্দিষ্ট শহরে বাস করে। এটি করার জন্য আপনি Scan অপারেশন ব্যবহার করবেন:

import boto3

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('Users')

response = table.scan(
    FilterExpression=Attr('City').eq('Dhaka')
)

items = response['Items']
print(items)

Query এবং Scan এর মধ্যে পার্থক্য:

FeatureQueryScan
SpeedFaster (Efficient, works with Primary Key/Index)Slower (Scans entire table)
Data RetrievalRetrieves data based on a specific condition (Primary Key or Index)Scans all items and filters results based on conditions
Use CaseIdeal for looking up a specific item or a range of itemsUsed for less specific or full-table searches
Capacity UsageConsumes fewer read capacity units (RCU)Consumes more read capacity units (RCU)
FilteringFiltering possible after Query, but efficientFiltering can be applied, but less efficient due to full scan
PerformanceMore efficient for large datasetsLess efficient, especially with large datasets

কখন Query এবং Scan ব্যবহার করবেন?

  • Query ব্যবহার করুন যখন আপনি নির্দিষ্ট Primary Key অথবা Secondary Index এর মাধ্যমে ডেটা অনুসন্ধান করতে চান এবং দ্রুত ফলাফল চান।
  • Scan ব্যবহার করুন যখন আপনি টেবিলের পুরো ডেটা বা কোনো বিশেষ ক্ষেত্রের মধ্যে খোঁজ করতে চান, কিন্তু যদি আপনি বড় টেবিলের মধ্যে কাজ করছেন, তবে এটি কম কার্যকর হতে পারে।
common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion